package com.nd.android.u.filestoragesystem.externalInterface;

import com.nd.android.u.filestoragesystem.business.ExternalInterfaceImp;
import com.nd.android.u.filestoragesystem.externalInterface.FileConstant.FilePath;
import com.nd.android.u.filestoragesystem.externalInterface.FileConstant.RequestType;

import android.net.Uri;
/**
 * 文件系统工厂类
 * 
 * <br>Created 2014-6-27 下午2:50:00
 * @version  
 * @author   huangszh		
 *
 * @see
 */
public final class FileUtilFactory {
	/**
	 * 单实例内部类。 <br>
	 * Created 2014-6-9 下午2:05:47
	 * 
	 * @version v1.2
	 * @author suchangjun
	 * 
	 * @see
	 */

	private static class SingletonHolder {
		private static final FileUtilFactory INSTANCE = new FileUtilFactory();
	}

	/**
	 * 内部构造函数。 Creates a new instance of SingletonHolder. <br>
	 * Created 2014-6-9 下午2:06:55
	 */
	private FileUtilFactory() {
	}

	/**
	 * 获取当前群工具类方法的实例。 <br>
	 * Created 2014-6-9 下午2:07:45
	 * 
	 * @return v1.2
	 * @author suchangjun
	 */
	public static FileUtilFactory getInstance() {
		return SingletonHolder.INSTANCE;
	}
	
	/**
	 * 初始化配置文件。
	 * <br>Created 2014-6-18 下午8:07:29
	 * @param baseUrl_str 文件系统地址
	 * @param middle_url 中间层地址
	 * @author       suchangjun
	*/
	public void initizlieConfig(String baseUrl_str,String middle_url) {
		baseUrl=baseUrl_str;
		middleUrl = middle_url;
		//设置一个文件操作实例。
		setExternalInterface(new ExternalInterfaceImp());
	}
	
	/**
	 * 获取文件操作接口。
	 * <br>Created 2014-6-18 下午8:12:16
	 * @return ExternalInterface
	 * @author       suchangjun
	*/
	public IExternalInterface getExternalInterface() {
		return externalInterface;
	}

	/**
	 * 设置文件操作接口实例。
	 * <br>Created 2014-6-18 下午8:12:37
	 * @param externalInterfaceOp 实例。
	 * @author       suchangjun
	*/
	private void setExternalInterface(IExternalInterface externalInterfaceOp) {
		externalInterface = externalInterfaceOp;
	}

	/**
	 * 文件请求基本地址。
	 * <br>Created 2014-6-18 下午8:13:05
	 * @return String
	 * @author       suchangjun
	*/
	public String getBaseUrl() {
		return baseUrl;
	}
	/**
	 * 文件操作接口。
	 */
	private IExternalInterface externalInterface;
	
	/**
	 * 文件存储系统域名
	 */
	private String baseUrl = "http://files.starapp.99.com/";
	
	/**
	 * 中间层系统域名
	 */
	private String middleUrl = "http://m.starapp.99.com:6869/";
	
	/**
	 * 中间层url地址
	 * 
	 * <br>Created 2014-7-2 上午11:32:25
	 * @return String
	 * @author        :  huangszh
	 */
	public String getMiddleUrl() {
        return middleUrl;
    }
	
	/**
     * 根据路径获取文件下载url
     * http://files.starapp.99.com/show/folder/cloudid/{cloudid}/type/{type}/id/{id}/appid/{appid}/path/{path}
     * [/sid/{sid}/size/{80|160|320|480|780|1024|1600}]
     * 
     * <br>Created 2014-6-17 下午2:27:02
     * @param cloudid   云id（不区分大小写），必选
     * @param type  参见@RequestType  类型：0=个人、1=组织、2=群、3=资源，必选
     * @param id    用户uid（type=0时）/组织id（type=1时）/群id（type=2时）/资源分类id（type=3时），必选
     * @param appid 应用id，必选
     * @param path  路径，必选 
     * @param sid   sid，鉴权
     * @param size  参见@PhotoSize 图片文件尺寸，可选，默认原图传0,若size大于图片尺寸，也返回原图
     *               80|160|320|480|780|1024|1600
     * @return  String
     * @author        :  huangszh
     */
    public String getDownUrlByPath(String cloudid,int type,long id,
            int appid,String path,String sid,int size) {
        
        StringBuilder url = new StringBuilder();
        url.append(baseUrl);
        url.append("show/folder/cloudid/").append(cloudid);
        url.append("/type/").append(type);
        url.append("/id/").append(id);
        url.append("/appid/").append(appid);
        url.append("/path/").append(Uri.encode(path));
        if(sid != null) {
        	url.append("/sid/").append(sid);
        }
        if(size > 0){
            url.append("/size/").append(size);
        }
        return url.toString();
    }
    
    /**
     * 获取粉丝团二维码地址
     * 
     * <br>Created 2014-6-30 下午2:01:37
     * @param cloudid   云id
     * @param gid   团id
     * @param appid  应用id
     * @param sid   sessionid
     * @return  String  
     * @author        :  huangszh
     */
    public String getQrCodeUrl(String cloudid,long gid,
            int appid,String sid) {
        
        return getDownUrlByPath(cloudid, RequestType.RESOURCE, gid, appid, FilePath.QRCODE, sid, 0);
    }
    
    /**
     * 获取粉丝团团徽url
     * 
     * <br>Created 2014-6-30 下午2:03:36
     * @param cloudid   云id
     * @param gid   团id
     * @param appid  应用id
     * @param sid   sessionid
     * @return  String  
     * @author        :  huangszh
     */
    public String getLogoUrl(String cloudid,long gid,
            int appid,String sid) {
        
        return getDownUrlByPath(cloudid, RequestType.RESOURCE, gid, appid, FilePath.LOGO, sid, 0);
    }
    
    /**
     * 根据fid获取文件下载url
     * http://files.starapp.99.com/show/file/fid/{fid}[/sid/{sid}/size/{80|160|320|480|780|1024|1600}]
     * 
     * <br>Created 2014-6-17 下午2:22:07
     * @param fid   文件id
     * @param sid   sid，鉴权
     * @param size  参见@PhotoSize 图片文件尺寸，可选，默认原图传0,若size大于图片尺寸，也返回原图
     *               80|160|320|480|780|1024|1600
     * @return  String
     * @author        :  huangszh
     */
    public String getDownUrlByFid(long fid,String sid,int size) {
     
        StringBuilder url = new StringBuilder();
        url.append(baseUrl);
        url.append("show/file/fid/").append(fid);
        if(sid != null) {
        	url.append("/sid/").append(sid);
        }
        if(size >0){
            url.append("/size/").append(size);
        }
        return url.toString();
       
    }
}
